type AppendArgument<Fn extends (...args: any[]) => any, A> = Fn extends (...args: infer R) => infer P ? (...args: [...R, A]) => P : never